package com.fps.webshop.question.question0200_0299;

import java.util.Arrays;

/**
 * 242. 有效的字母异位词
 * 
 * 给定两个字符串 s 和 t ，编写一个函数来判断 t 是否是 s 的字母异位词。
 * 
 * 注意：若 s 和 t 中每个字符出现的次数都相同，则称 s 和 t 互为字母异位词。
 * 
 * 示例 1:
 * 输入: s = "anagram", t = "nagaram"
 * 输出: true
 * 
 * 示例 2:
 * 输入: s = "rat", t = "car"
 * 输出: false
 *  
 * 提示:
 * 		1 <= s.length, t.length <= 5 * 104
 * 		s 和 t 仅包含小写字母
 */
public class Question242 {
	
	
	/**
	 * 第一次提交，使用两个数组分别记录26个字母出现的次数
	 * 
	 * 提交结果	执行用时	内存消耗	语言		提交时间				备注
	 * 通过		1 ms	38.3 MB	Java	2021/08/16 15:26
	 * 
	 * 执行用时：1 ms, 在所有 Java 提交中击败了100.00%的用户
	 * 内存消耗：38.3 MB, 在所有 Java 提交中击败了90.39%的用户
	 */
	public static boolean isAnagram1(String s, String t) {
		int[] aa = new int[26];
		int[] bb = new int[26];
		char[] ss = s.toCharArray();
		char[] tt = t.toCharArray();
		for(char sss : ss) {
			aa[sss-'a'] ++;
		}
		for(char ttt:tt) {
			bb[ttt-'a'] ++;
		}
		for(int i=0;i<26;i++) {
			if(aa[i]!=bb[i]) {
				return false;
			}
		}
		return true;
    }
	/**
	 * 第二次提交，尝试使用排序
	 * 
	 * 提交结果	执行用时	内存消耗	语言		提交时间				备注
	 * 通过		3 ms	38.7 MB	Java	2021/08/16 15:33
	 * 
	 * 执行用时：3 ms, 在所有 Java 提交中击败了81.78%的用户
	 * 内存消耗：38.7 MB, 在所有 Java 提交中击败了35.33%的用户
	 */
	public static boolean isAnagram2(String s, String t) {
		char[] ss = s.toCharArray();
		char[] tt = t.toCharArray();
		if(ss.length!=tt.length) {
			return false;
		}
		Arrays.sort(ss);
		Arrays.sort(tt);
		for(int i=0;i<ss.length;i++) {
			if(ss[i]!=tt[i]) {
				return false;
			}
		}
		return true;
    }
	
	public static void main(String[] args) {
		System.out.print(isAnagram2("anagram","nagaram"));
	}
}
